package com.cy.pj.common.bo;

import lombok.Data;
import lombok.ToString;

import java.io.Serializable;
import java.util.List;

/* ====== BO（ Business Object）：业务对象。 由Service层输出的封装业务逻辑执行结果的对象 ======
 * 1.所有bo属性类型定义都要有属性对象;
 * 2.所有对象值无需定义;
 * 3.所有pojo对象都不要写业务逻辑;
 * 4.pojo对象都要提供无参构造函数;
 * 5.pojo对象提供set/get方法,boolean提供isxxx方法,并且禁止一个属性存在isxxx和getxxx方法;
 * 6.pojo里面一定要重写toString()方法;
 *
 * 1-- 业务值对象定义，基于此对象封装数据层SysLog返回的数据;
 * 2-- 并计算的分页信息;
 * */
@Data
@ToString
//类上的泛型用于定义: 类中属性, 方法参数, 方法返回值类型;
public class PageObject<T> implements Serializable {
    /*
     * 1.serialVersionUID 用来表明类的不同版本间的兼容性;
     * 2.序列化的时候，被序列化的类要有一个唯一标记;
     * 3.客户端和服务端必须需要同一个对象，serialVersionUID的唯一值判定其为同一个对象;
     * */
    private static final long serialVersionUID = 3312263899123595294L;

    //当前页的页码值;
    private Integer pageCurrent = 1;    //给定的默认值;
    //页面大小,每页最多显示多少条数据;
    private Integer pageSize;
    //查询到的总行数;
    private Integer rowCount;
    //总页数,通过rowCount和pageSize之间计算获得;
    private Integer pageCount;
    //分页查询,当前页显示的记录数,返回的是一个集合数组;
    private List<T> records;

    //无参构造
    public PageObject() {
    }

    //有参构造
    //pageCount参数不需要传,是计算得到的;
    public PageObject(Integer pageCurrent, Integer pageSize, Integer rowCount, List<T> records) {
        this.pageCurrent = pageCurrent;
        this.pageSize = pageSize;
        this.rowCount = rowCount;

/*        this.pageCount = rowCount / pageSize;
        //如果rowCount整数pageSize判断不适用;
        //但是只要把rowCount - 1 ,让他变成不整除,也适用下面的判断,所以综合一下得出下面的语句;
        if (rowCount % pageSize != 0) {
            pageCount++;
        }*/
        this.pageCount = (rowCount - 1) / pageSize + 1;

        this.records = records;
    }

    public PageObject(Integer pageCurrent, Integer pageSize, Integer rowCount, Integer pageCount, List<T> records) {
        this.pageCurrent = pageCurrent;
        this.pageSize = pageSize;
        this.rowCount = rowCount;
        this.pageCount = pageCount;
        this.records = records;
    }
}
